#ifndef SIMULACION_H_
#define SIMULACION_H_

using namespace std;
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include "string.h"
#include <sys/wait.h>
#include "concurrencia/Fifo.h"
#include "concurrencia/Semaforo.h"
#include "concurrencia/SimulacionHandler.h"
#include "concurrencia/SignalHandler.h"
#include "Auto.h"

class Simulacion {
private:
	Fifo * entrada;
	SimulacionHandler * sim;
	Semaforo * lectura;
	Semaforo * escritura;
	Semaforo * lecturaSalida;
	Semaforo * escrituraSalida;
	Semaforo * empezarSimulacion;
	Semaforo * terminarSimulacion;

	//Se encarga de poner el auto en el fifo para que cualquier entrada lo pueda tomar.
	void ingresarAuto(Auto * autoAEntrar);
	//Espera a que se cierren las puertas y luego termina la simulación.
	void terminar();
public:
	Simulacion(Semaforo * lecturaEntrada, Semaforo * escrituraEntrada,
			Semaforo * empezarSimulacion, Semaforo * terminarSimulacion,
			Semaforo * lecturaSalida, Semaforo * escrituraSalida);
	void empezar();
	virtual ~Simulacion();
};

#endif /* SIMULACION_H_ */
